import csv
import time
import os


# 定义主函数
def main():


    # 开始一个无限循环
    while True:
        # 提供选项并获取用户输入
        choice = input("1. 进入计算器\n2. 退出程序\n请输入您的选择：")
        # 如果用户选择进入计算器
        if choice == '1':
            count()  # 调用计算器功能
        # 如果用户选择退出程序
        elif choice == '2':
            break  # 退出循环，结束程序


# 定义菜单函数，用于显示选项
def menu():
    # 开始一个无限循环
    while True:
        # 打印选项
        print("1. 进入计算器\n2. 退出程序\n")
        # 获取用户输入
        choice = input("请输入您的选择：")
        # 根据用户选择执行相应功能
        if choice == '1':
            count()  # 调用计算器功能
        elif choice == '2':
            break  # 退出循环，结束程序


# 定义计算器功能
def count():
    print("------启动计算器------")
    # 使用 for 循环迭代 0 到 100，即进度从 0% 到 100%
    for i in range(101):
        # 使用 \r 实现在同一行输出，并使用格式化字符串打印当前进度
        print("\r{:3}%".format(i), end="")
        time.sleep(0.005)  # 通过 time.sleep 控制打印速度，暂停 0.005 秒

    # 获取用户输入的性别
    gender = input("""
请输入性别（M/F）：""")
    # 获取用户输入的年龄并转换为整数
    age = int(properly_input("请输入年龄："))
    # 获取用户输入的身高并转换为浮点数
    height = float(properly_input("请输入身高（cm）："))
    # 获取用户输入的体重并转换为浮点数
    weight = float(properly_input("请输入体重（kg）："))
    if height > 3:
        if gender == 'M':
            BMR = 66 + (13.7 * weight) + (5 * height) - (6.8 * age)
        elif gender == 'F':
            BMR = 655 + (9.6 * weight) + (1.8 * height) - (4.7 * age)
    elif height < 3:
        if gender == 'M':
            BMR = 66 + (13.7 * weight) + (500 * height) - (6.8 * age)
        elif gender == 'F':
            BMR = 655 + (9.6 * weight) + (180 * height) - (4.7 * age)
    else:
        print("无效的性别输入，无法计算BMR。")
    # 输出结果
    print("您的BMR指数为：", BMR)
    global b  # 声明b为全局变量
    b = gender, age, height, weight, BMR # 定义b
    list_start()

def list_start():
    csv_file = "bmr_data.csv"

    # 如果文件不存在，则写入表头
    if not os.path.exists(csv_file):
        with open("bmr_data.csv", "w", newline="") as f:
            writer = csv.writer(f)
            header = ["Gender", "Age", "Height", "Weight", "BMR"]
            writer.writerow(header)

        # 打开文件用于追加数据
        with open(csv_file, "a", newline="") as f:
            # 创建 CSV writer 对象
            writer = csv.writer(f)

            # 将计算的结果和数据写入 CSV 文件
            writer.writerow(b)
    elif os.path.exists(csv_file):
        with open("bmr_data.csv", "w", newline="") as f:
            writer = csv.writer(f)
            writer.writerow([])
            with open("bmr_data.csv", "w",newline="") as f:
                writer = csv.writer(f)
                header = ["  Gender", "Age", "Height", "Weight", "BMR"]
                writer.writerow(header)
                writer.writerow(b)# 将计算的结果和数据写入 CSV 文件


def properly_input(prompt):
    # 通过无限循环确保用户提供有效的输入
    while True:
        try:
            # 尝试将用户输入的值转换为整数
            value = int(input(prompt))

            # 检查值是否为非负整数，如果是，则返回该值
            if value >= 0:
                return value
            else:
                print("请输入一个正整数。")  # 如果值为负数，则提醒用户输入正整数
        except ValueError:
            print("无效的输入，请输入一个正整数。")  # 如果无法转换为整数，则提醒用户输入有效的整数


# 程序入口
if __name__ == "__main__":
    main()  # 调用主函数

